# 自动寻找未翻译文字

# 简介

项目中有中英文语言需求,存在很多漏翻译的,一个一个去发现不现实,于是通过node.js去自动找出所有未翻译的语言。

# 架构

# 入口

通过bat脚本跑node

node check_cn_in_en.js 
node find_omit.js
pause

# 配置

将需要配置的例如:入口文件、出口文件、需忽略文件等单独使用json文件进行配置。

# lib

一些工具函数

# 主函数

# 找出已翻译但含中文的

项目的翻译都在一个文件中,只需遍历这文件内容即可。

1、获取配置文件

2、正则

// 匹配中文
var CN_REG = /[\u4e00-\u9fa5]/
// 匹配每行的内容 "UDP": "UDP"
var	LINE_REG = /".*?"\s*:\s*"(.*)"/

3、跑起来

通过fs.readFileSync(filePath, { encoding: 'utf-8' });读出文件内容

通过split(/\r?\n/)分割出每行代码

再循环通过中文的正则匹配,记录

最后通过

fs.writeFile(OUT_FILE, out.join('\n\n'), err => {
	if(err)console.log(err);
});

写成文件

# 找出代码文件中未翻译的

1、获取配置,需要寻找的代码文件(夹)

2、 删除之前的记录

const fs = require('fs');

function delDir(path){
    let files = [];
    if(fs.existsSync(path)){
        files = fs.readdirSync(path);
        files.forEach((file, index) => {
            let curPath = path + "/" + file;
            if(fs.statSync(curPath).isDirectory()){
                delDir(curPath); //递归删除文件夹
            } else {
                fs.unlinkSync(curPath); //删除文件
            }
        });
        fs.rmdirSync(path);
    }
}

module.exports = delDir;

3、根据入口,判断是文件夹就递归读,是文件就走主逻辑

4、主逻辑

读文件

通过正则去除注释代码

//去掉注释代码 //、/**/ 两种
content = content.replace(/^\s*(\/\/.*).*$/mg, '');
content = content.replace(/\/\*(.|\r|\n)*?\*\//mg, '');

通过正则找出需要翻译的文字

// _("翻译")
var reg = /_\(('|")(.+?)(?:\1\)|\1,)/g;

记录需要翻译的文字、该文字所在文件路径

5、获取已翻译文件列表

6、查找没有翻译的

7、打印出来